package br.com.ecomanda.managedbean;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;

import br.com.ecomanda.controller.EComandaController;
import br.com.ecomanda.exceptions.BusinessException;
import br.com.ecomanda.model.Comanda;
import br.com.ecomanda.model.Funcionario;
import br.com.ecomanda.model.Item;
import br.com.ecomanda.model.Mesa;
import br.com.ecomanda.util.JSFUtil;

public class PedidoBean {

	private EComandaController parent;

	private Funcionario funcionario;

	private Comanda comanda;

	private Item item;

	private int mesaId;

	private float quantidade;

	private String observacoes;

	private List<Mesa> mesas;

	private List<Item> itens;
	
	@PostConstruct
	public void init(){
		String comandaIdString = (String) JSFUtil.getRequestAttribute("comanda");
		
		int comandaId = 0;
		try{
			comandaId = Integer.parseInt(comandaIdString);
		} catch (NumberFormatException e) {
			return;
		}
		
		this.comanda = parent.getComandaController().getComanda(comandaId);
	}

	public PedidoBean() {
		this.parent = (EComandaController) JSFUtil.getFromSession("parent");
		this.funcionario = (Funcionario) JSFUtil.getFromSession("funcionario");

		this.mesas = parent.getPedidoController().getMesas();
		this.itens = parent.getPedidoController().getItens();
	}

	public List<Item> completeItem(String query) {
		List<Item> sugestoes = new ArrayList<Item>();

		for (Item item : itens)
			if (!item.getDisponivel())
				continue;
			else if (item.getDsItem().toLowerCase()
					.contains(query.toLowerCase())
					|| (item.getIdItem() + "").contains(query))
				sugestoes.add(item);

		return sugestoes;
	}

	public Comanda getComanda() {
		return comanda;
	}

	public Item getItem() {
		return item;
	}

	public List<Item> getItens() {
		return itens;
	}

	private Mesa getMesa() {
		if (mesaId == 0)
			return null;
		return parent.getPedidoController().getMesa(mesaId);
	}

	public int getMesaId() {
		return mesaId;
	}

	public List<Mesa> getMesas() {
		return mesas;
	}

	public String getObservacoes() {
		return observacoes;
	}

	public float getQuantidade() {
		return quantidade;
	}

	public void registrarPedido() {
		if (comanda == null) {
			JSFUtil.addFacesErrorMessage("Comanda inexistente!");
			return;
		}

		if (item == null) {
			JSFUtil.addFacesErrorMessage("Item inexistente!");
			return;
		}

		try {
			parent.getPedidoController().registrarPedido(comanda, item,
					quantidade, funcionario, getMesa(), observacoes);
			JSFUtil.addFacesInformationMessage("Pedido registrado com sucesso!");
		} catch (BusinessException e) {
			JSFUtil.addFacesErrorMessage(e.getMessage());
			return;
		} catch (Exception e) {
			JSFUtil.addFacesErrorMessage("Falha ao tentar registrar o pedido: "
					+ e.getMessage());
			e.printStackTrace();
		}
	}

	public void setComanda(Comanda comanda) {
		this.comanda = comanda;
	}
	
	public void setItem(Item item){
		this.item = item;
	}

	public void setItens(List<Item> itens) {
		this.itens = itens;
	}

	public void setMesaId(int mesa) {
		this.mesaId = mesa;
	}

	public void setMesas(List<Mesa> mesas) {
		this.mesas = mesas;
	}

	public void setObservacoes(String observacoes) {
		this.observacoes = observacoes;
	}

	public void setQuantidade(float quantidade) {
		this.quantidade = quantidade;
	}

}
